#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "Globales.h"
#include "TDiccionario.h"
#include "TConstructor.h"
#include "TCola.h"

int TConstructor_Crear(TConstructor* tc) {
  int iError = NO_HAY_ERRORES;
  tc->m_xTweet = NULL;
  strcpyMem(&(tc->m_szUltimaClave), "");
  return iError;
}

int TConstructor_Destruir(TConstructor* tc) {
  int iError = NO_HAY_ERRORES;
  strcpyMem(&(tc->m_szUltimaClave), "");
  return iError;
}

int TConstructor_setCola(TConstructor* tc, TCola* cola) {
  int iError = NO_HAY_ERRORES;
  tc->m_xCola = cola;
  return iError;
}

int TConstructor_eventoOcurrido(const void* tc, int evento, const void* dato) {
  int iError = NO_HAY_ERRORES;
  switch(evento) {
    case CB_COMIENZA_ARRAY:    /* 00 */
      break;
    case CB_TERMINA_ARRAY:     /* 01 */
      break;
    case CB_COMIENZA_OBJETO:   /* 02 */
      iError = TDiccionario_Crear(&(((TConstructor*)tc)->m_xTweet));
      break;
    case CB_TERMINA_OBJETO:    /* 03 */
      TCola_Agregar(((TConstructor*)tc)->m_xCola, ((TConstructor*)tc)->m_xTweet);
      TDiccionario_Destruir(&(((TConstructor*)tc)->m_xTweet));
      break;
    case CB_CLAVE:             /* 04 */
      ((TConstructor*)tc)->m_szUltimaClave = (char*)dato;
      break;
    case CB_TRUE:              /* 05 */
    case CB_FALSE:             /* 06 */
    case CB_NULL:              /* 07 */
    case CB_NUMERO:            /* 08 */
    case CB_STRING:            /* 09 */
      if (dato != NULL) {
        iError = TDiccionario_colocar(((const TConstructor*)tc)->m_xTweet, ((TConstructor*)tc)->m_szUltimaClave, (void*)dato);
      } else {
        iError = TDiccionario_colocar(((const TConstructor*)tc)->m_xTweet, ((TConstructor*)tc)->m_szUltimaClave, NULL);
      }
      break;
  }
  return iError;
}

